/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.reporte.accion;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.reporte.control.DatosReporteControl;
import org.reporte.modelo.DatosReporte;

/**
 *
 * @author luisrg
 */
public class GeneracionReporte extends DatosReporteControl{
    
    
    private final String NOMBRE_SERVLET = "GeneraReporte";
    private final String NOMBRE_PARAMETRO = "idReporteGenera";
    private String entidadParametros;
    private Connection conexion;
    private Long codigoReporte = 0L;
    
    
    public GeneracionReporte(Connection conexion){
        this.conexion = conexion;
    }
    
    /**
     * Genera la carga de datos para obtener el link del reporte
     * @param codigoReporte Codigo del reporte que se desea generar
     * @param usuarioGenera Usuario que genera la informacion para lanzar el reporte
     * @param datosReporte Datos que se enviaran en la generacion del reporte
     */
    public void procesarParametrosReporte(Long codigoReporte, String usuarioGenera,List<DatosReporte> datosReporte) throws SQLException, Exception{
        codigoReporte=ejecutarTransaccionParametros(codigoReporte,usuarioGenera, datosReporte);
        this.codigoReporte = codigoReporte;
    }

     /**
     * Genera la carga de datos para obtener el link del reporte
     * @param nombreReporte Nombre del reporte que se desea generar
     * @param usuarioGenera Usuario que genera la informacion para lanzar el reporte
     * @param datosReporte Datos que se enviaran en la generacion del reporte
     */
    public void procesarParametrosReporte(String nombreReporte, String usuarioGenera,List<DatosReporte> datosReporte) throws SQLException, Exception{
        codigoReporte=ejecutarTransaccionParametros(obtenerIdReporte(nombreReporte),usuarioGenera, datosReporte);
    }

    /**
     * Genera la carga de datos para obtener el link del reporte
     * @param codigoReporte Codigo del reporte que se desea generar
     * @param usuarioGenera Usuario que genera la informacion para lanzar el reporte
     */
    public void procesarParametrosReporte(Long codigoReporte, String usuarioGenera) throws SQLException, Exception{
        List<DatosReporte> datosReporte = new ArrayList<DatosReporte>();
        DatosReporte d = new DatosReporte();
        d.setNombre("REPORTE GENERACION");
        d.setValor("REPORTE GENERACION");
        datosReporte.add(d);
        codigoReporte=ejecutarTransaccionParametros(codigoReporte,usuarioGenera, datosReporte);
        this.codigoReporte = codigoReporte;
    }


      /**
     * Genera la carga de datos para obtener el link del reporte
     * @param nombreReporte Nombre del reporte que se desea generar
     * @param usuarioGenera Usuario que genera la informacion para lanzar el reporte
     */
    public void procesarParametrosReporte(String nombreReporte, String usuarioGenera) throws SQLException, Exception{
        List<DatosReporte> datosReporte = new ArrayList<DatosReporte>();
        DatosReporte d = new DatosReporte();
        d.setNombre("REPORTE GENERACION");
        d.setValor("REPORTE GENERACION");
        datosReporte.add(d);
        codigoReporte=ejecutarTransaccionParametros(obtenerIdReporte(nombreReporte),usuarioGenera, datosReporte);
    }




    

    /**
     * Obtiene el link de la generacion del reporte
     * @return String link de la generaciond el reporte
     */
    public String obtenerLink() throws Exception{
        try{
            if(codigoReporte==0){
                throw new Exception("No se ha procesado datos de reportes para la generación del link");
            }
            
            StringBuffer str = new StringBuffer();
            str.append("http://");
            str.append(obtenerServidorAppModuloReporte())   .append(":");
            str.append(obtenerPuertoAppModuloReporte())     .append("/");
            str.append(obtenerRaizAppModuloReporte())       .append("/");
            str.append(NOMBRE_SERVLET)                      .append("?");
            str.append(NOMBRE_PARAMETRO)                    .append("=");
            str.append(codigoReporte);
            return str.toString();
        }catch(Exception e){
            throw e;
        }
    }
    
    
    
    public String obtenerServidorAppModuloReporte() throws Exception{
        return obtenerParametroSistema("MODULO_REPORTES_APP_SERVIDOR");
    }
    
    public String obtenerPuertoAppModuloReporte() throws Exception{
        return obtenerParametroSistema("MODULO_REPORTES_APP_PUERTO");
    }
    
    public String obtenerRaizAppModuloReporte() throws Exception{
        return obtenerParametroSistema("MODULO_REPORTES_APP_RAIZ");
    }
    
    
        

    @Override
    public Connection conexion() {
        return conexion;
    }

    public String getEntidadParametros() {
        return entidadParametros;
    }

    public void setEntidadParametros(String entidadParametros) {
        this.entidadParametros = entidadParametros;
    }
}
